/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package componentes;

import java.beans.*;
import java.io.Serializable;
import java.sql.*;

/**
 *
 * @author Ximena del Pilar
 */
public class BeanConector{
  /** URL de la conexión JDBC
  */
  private String url=null;
  /** Login de la Conexión JDBC
  */
  private String login=null;
  /** Password de la Conexión JDBC
  */
  private String password=null;
  /** Driver de la Conexión JDBC
  */
  private String driver=null;
  /** Objeto del tipo Connection para manejar la conexión JDBC
  */
  private Connection cx;
  /** Objeto Statement para manejar las consultas
  */
  private java.sql.Statement query;
  /** Objeto ResultSet para manejar los resultados de la ejecución de consultas tipo Select
  */
  private ResultSet resultado;
  /** Cadena donde se guardan los errores generados por las excepciones JDBC
  */
  private String error="";
  /** Crea un nuevo objeto BeanConector
  */
  public BeanConector() {
  }
  /** Fija la URL utilizada en la conexión<br>
     * ejemplo:<br>
     * con.setUrl("jdbc:mysql://172.16.41.115/examenes");
     * @param valor Cadena que especifica la URL para conectarse
   * */
  public void setUrl(String valor){
     url=valor;
  }
  /**Retorna la URL utilizada para la conexión
  */
  public String getUrl(){
      return url;
  }
  /** Fija el Login usado en la Conexión JDBC
     * <br>
     * Ejemplo<br>
     * con.setLogin("root");
     *
     *
     * @param valor Login usado para la conexión
     */
  public void setLogin(String valor){
        login=valor;
  }
  /**Obtiene el login utilizado para la conexión JDBC
  */
  public String getLogin(){
        return login;
  }
  /** Permite fijar el password para la conexión JDBC
     * @param valor Password usado en la conexión
     */
  public void setPassword(String valor){
        password=valor;
  }
  /**Obtiene el password utilizado para la conexión
  */
  public String getPassword(){
        return password;
  }
  /** Fija el Driver usado para la conexión JDBC<br>ejemplo
     * <br>
     * con.setDriver("com.mysql.jdbc.Driver");
     * @param valor Cadena que especifica el Driver
     */
  public void setDriver(String valor){
        driver=valor;
         /**Retorna el driver utilizado para la conexión JDBC
  */
    }
  public String getDriver(){
        return driver;
  }
  /** Recupera la cadena de un mensaje de error cuando ha ocurrido una expeción en alguna
operación con JDBC
     * @return Cadena de error (mensaje de error)
     */
  public String getError(){
    return error;
  }
  /** Metodo para realizar la conexión a la BD
     * @return 1 si la conexión fue exitosa<br>
     * -1 si hubo error <br>
     * Si hubo error, con getError puede recuperar la cadena de la excepción
     */
  public int conectar(){
       try{
            //registrar la clase del driver
            Class.forName(driver);
            //obtener el objeto de conexion
            cx=DriverManager.getConnection(url,login,password);
            //crear un objeto Statement para realizar consultas
            query=cx.createStatement();
            return 1;
        }
        catch(ClassNotFoundException e){
            error=e.getMessage();
            return -1;
        }
        catch(SQLException e){
            error=e.getMessage();
            return -1;
        }
  }
    /** Manda a Ejecutar una sentencia SQL del tipo insert,update, delete o cualquiera que no retorne
un resultset
     * @return rs Número de registros afectados<br>
     * -1 Si ha ocurrido un error
     * @param sql Cadena que tiene la consulta a ejecutar
     */
    public int actualizar(String sql){
        try{
            int rs=query.executeUpdate(sql);
            return rs;
        }
        catch(SQLException e){

         error=e.getMessage();
            return -1;
        }
    }
  /** Ejecuta una consulta del tipo select
     * @param sql Cadena de la sentencia sql tipo select
     * @return true Si la consulta se ejecuto correctamente<br>
     * false Si hay error en la consulta<br>
     * Ejecutando el método getError sobre el Bean puede recuperar el error generado
     */
  public boolean consultar(String sql){
    try{
      resultado=query.executeQuery(sql);
      return true;
    }
    catch(SQLException e){
        error=e.getMessage();
       e.printStackTrace();
        return false;
    }
  }
   /** Permite recuperar valores enteros de un registro mantenido por el bean cuando se conoce el
nombre del campo
   * @param nomb Nombre del Campo que se desea recuperar
   * @return n Valor del Campo<br>
   * -1 Si ha ocurrido un error
   */
   public int getEntero(String nomb){
       try{
            int ent=resultado.getInt(nomb);
            return ent;
       }
       catch(SQLException e){
            error=e.getMessage();
            return -1;
       }
   }
  /** Permite recuperar valores enteros de un registro mantenido por el bean a partir de la posición
dentro de la sentencia SQL (Posiciion inicial =1)
    * @param indice Posición en la que se encuentra el campo dentro de la sentencia SQL mandada a
Ejecutar
    * @return n Valor del Campo<br>
    * -1 Si ha ocurrido Error
    */
   public int getEntero(int indice){
        try{
            int ent=resultado.getInt(indice);
            return ent;
       }
       catch(SQLException e){
            error=e.getMessage();
            return -1;
       }
   }
  /** Permite recuperar un valor tipo String de un registro cuando se conoce el nombre del campo
    * @param nomb Nombre del Campo
    * @return S Cadena Recuperada<br>
    * "Error al recuperar campo" si ha ocurrido un error
    */
   public String getCadena(String nomb){
       try{
        String cad=resultado.getString(nomb);
        return cad;
       }
       catch(SQLException e){
            error=e.getMessage();
            return null;
       }
    }
  /** Permite recuperar un String de un registro conociendo su posición en la sentencia SQL
(Posición Inicial=1)
     * @param indice Posición donde esta ubicado el campo dentro de la sentencia SQL
     * @return S, Cadena con el valor<br>
     * "Error al recuperar el campo" si ha ocurrido un Error
     */
   public String getCadena(int indice){
        try{
        String cad=resultado.getString(indice);
        return cad;
       }
       catch(SQLException e){
            error=e.getMessage();
            return null;
       }
   }
  /** Permite recuperar un elemento tipo Objeto a partir del nombre del campo
    * @param nomb Nombre del Campo
    * @return O, Objeto recuperado
    * null, si ha ocurrido un error<br>
    * El desarrollador debe convertir el objeto al tipo deseado
    */
   public Object getObjeto(String nomb){
       try{
        Object objeto=resultado.getObject(nomb);
        return objeto;
         }
       catch(SQLException e){
            error=e.getMessage();
            return null;
       }
   }
  /** Permite Recuperar un objeto a partir de la posición del campo en una sentencia SQL
    * @param indice Posición del Campo dentro de la Sentencia SQL
    * @return O, Objeto recuperado
    * null, si ha ocurrido un error<br>
    * El desarrollador debe convertir el objeto al tipo deseado
    */
   public Object getObjeto(int indice){
       try{
        Object objeto=resultado.getObject(indice);
        return objeto;
       }
       catch(SQLException e){
            error=e.getMessage();
            return null;
       }
   }
  /** Permite Recuperar un Objeto tipo Date cuando se conoce el campo
    * @param nomb Nombre del Campo
    * @return D, Dato tipo Date recuperado
    * null, si ha ocurrido un error
    */
   public Date getFecha(String nomb){
       try{
        Date fecha=resultado.getDate(nomb);
        return fecha;
       }
       catch(SQLException e){
            error=e.getMessage();
            return null;
       }
   }
  /** Permite Recuperar un Objeto tipo Date cuando se conoce su posición
    * @param indice Posición del campo dentro de la sentencia SQL
    * @return D, Dato tipo Date recuperado
    * null, si ha ocurrido un error
    */
   public Date getFecha(int indice){
       try{
        Date fecha=resultado.getDate(indice);
        return fecha;
       }
       catch(SQLException e){

       System.out.println("error recuperando la fecha"+e.getMessage());
            error=e.getMessage();
            return null;
       }
   }
   /** Permite avanzar al siguiente registro dentro de un resultado
    * @return 1, si hay más registros<br>
    * 0, si no hay mas registros<br>
    * -1, si ha ocurrido una excepción
    * </br>
    */
   public int siguiente(){
     try{
          if(resultado.next())
            return 1;
          else
            return 0;
     }
     catch(SQLException e){
          error=e.getMessage();
          return -1;
     }
   }
  /** Permite cerrar la conexión con la BD
    * @return true, si se cerro adecuadamente<br>
    * false, si ha ocurrido un error
    */
   public boolean cerrarCx(){
        try {
            cx.close();
            return true;
        }
        catch (SQLException e){
           error=e.getMessage();
           return false;
        }
   }
}
